// 集合型 Nim 游戏
// 给定 𝑚 个整数组成的集合 𝑎𝑖，给定 𝑛 堆石子的数量 𝑏𝑖。
// 两位玩家轮流操作，每次操作可以从任意一堆石子中拿取石子，
// 每次拿取的石子数量必须是集合 𝑎 中的整数，最后无法进行操作的人视为失败。
// 如果两人都采用最优策略，问先手是否必胜。
// 相关帖子 ：https://www.cnblogs.com/dx123/p/17277281.html

#include <bits/stdc++.h>

using namespace std;

const int MAXN = 1001;
const int MAXM = 10001;
int n, m, x;
// 记录每个节点的 sg 值
int f[MAXN];
int arr[MAXM];

inline int read()
{
    char ch = getchar();
    int x = 0, f = 1;
    while(ch < '0' || ch > '9')
    {
        if(ch == '-') f = -1;
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9')
    {
        x = 10 * x + ch - '0';
        ch = getchar();
    }
    return f * x;
}

int sg(int u)
{
    // 记忆化搜索
    if(f[u] != -1) return f[u];
    // 把子节点的 sg 值插入集合
    unordered_set<int> s;
    for(int i = 0; i < m; ++i)
    {
        if(u >= arr[i]) s.insert(sg(u - arr[i]));
    }

    // mex 运算求当前节点的 sg 值并记忆
    for(int i = 0; ; ++i)
    {
        if(!s.count(i)) return f[u] = i;
    }
}

int main()
{
    m = read();
    for(int i = 0; i < m; ++i) arr[i] = read();
    n = read();
    memset(f, -1, sizeof f);
    int eor = 0;
    for(int i = 0; i < n; ++i)
    {
        x = read();
        eor ^= sg(x);
    }
    if(eor != 0) puts("Yes");
    else puts("No");

    return 0;
}